package org.example;

import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;

import java.util.stream.Stream;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)   //指定执行顺序
public class JunitTest {
    public static Stream<Arguments> Generate() {
        return Stream.of(Arguments.arguments("张三",13),Arguments.arguments("李四",28));
    }

    @Order(2)
    @Test
    public void Test01() {
        System.out.println("这是第一个测试用例");
    }
    @Order(1)
    @Test
    public void Test02(){
        System.out.println("这是第二个测试用例");
    }

   /* @BeforeEach
    public void Start(){
        System.out.println("开始执行一条测试用例");
    }
    @AfterEach
    public void End(){
        System.out.println("一条测试用例结束");
    }*/

    //单参数
    //弊端是只能接收一种类型的参数，如果是int类型写ints,byte类型写bytes...
    //对应的方法只能接收一个参数
    @ParameterizedTest
    @ValueSource(ints={1,2,3,4})  //{}花括号里面可以放测试数据或者预期结果
    public void Test03(int x){
        System.out.println("接收的参数x="+x);
    }

    //多参数
    @ParameterizedTest
    @CsvSource({"'张三',19"})
    public void Test04(String name,int age){
        System.out.println(name+"今年"+age+"岁");
    }

    //多参数，读取文件中的数据进行操作
    @ParameterizedTest
    @CsvFileSource(resources="test01.csv")
    public void Test05(String name,int age){
        System.out.println("name:"+name+",age:"+age);
    }

    //通过方法生成测试数据
    @ParameterizedTest
    @MethodSource("Generate")
    public void Test06(String name,int age){
        System.out.println("name:"+name+",age:"+age);
    }

}
